home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / listdl.d < prev    next >
Text File  |  1997-10-26  |  9KB  |  224 lines

  1. DEFINITION MODULE ListDl;
  2.  
  3. FROM SYSTEM     IMPORT ADDRESS;
  4. FROM MagicSys   IMPORT sBITSET, sINTEGER;
  5. FROM GrafBase   IMPORT Rectangle;
  6.  
  7. IMPORT ListMan;
  8. IMPORT WinDials;
  9.  
  10. (*$H+*)
  11. TYPE    
  12.         wdSetProc       = WinDials.wdSetProc;
  13.         
  14.         selectEntryProc = ListMan.selectEntryProc;
  15.                                       
  16.         isSelectedProc  = ListMan.isSelectedProc;
  17.         (* Wird aufgerufen, um festzustellen, ob ein Eintrag selektiert 
  18.          * wurde 
  19.          *)
  20.                                       
  21.         entryToStringProc = PROCEDURE (    (* entry: *) ADDRESS,
  22.                                            (* env:   *) ADDRESS,
  23.                                        VAR (* str:   *) ARRAY OF CHAR);
  24.         (* Wird aufgerufen, wenn der Autolocator benutzt werden soll *)
  25.                                        
  26.         entryIsSelectableProc  = ListMan.entryIsSelectableProc;
  27.         (* Wird aufgerufen, um festzustellen, ob ein Eintrag disabled 
  28.          * ist oder nicht *)
  29.         
  30.         drawEntryProc          = ListMan.drawEntryProc;
  31.         (* Wird aufgerufen, um einen Eintrag zu zeichen. 
  32.          * x und y enthalten die Position, offset ist ein "Offset" vom linken
  33.          * Rand aus, cliprect muž bercksichtigt werden!
  34.          * Wenn der entry NIL ist, dann muž ein leeres Rechteck gezeichnet 
  35.          * werden
  36.          *)
  37.         
  38.         inLoopProc = PROCEDURE ( (* entry: *) ADDRESS,
  39.                                  (* env:   *) ADDRESS);
  40.         (* Wird innerhalb der Schleife von DoListDial aufgerufen. 
  41.          * Erh„lt als Parameter den zuletzt angew„hlten Eintrag, NIL, falls
  42.          * keiner selektiert ist.
  43.          *)
  44.         
  45.         lsCheckExitProc = PROCEDURE ( (* tree: *) ADDRESS,
  46.                                       (* env:   *) ADDRESS,
  47.                                       (* exitBut: *) INTEGER,
  48.                                       (* lastSel: *) ADDRESS,
  49.                                       (* kstate: *) BITSET): BOOLEAN;
  50.         (* Wird aufgerufen, wenn ein ListDialog verlassen werden soll.
  51.          * Damit kann man noch Eingaben validieren 
  52.          *)
  53.         
  54.         specialButProc  = PROCEDURE (    (* objc:        *) sINTEGER,
  55.                                          (* env:         *) ADDRESS,
  56.                                          (* listInfo:    *) ADDRESS,
  57.                                      VAR (* redraw:      *)BOOLEAN,
  58.                                      VAR (* dialFinish:  *) BOOLEAN);
  59.         
  60.         (* Fr zus„tzliche Buttons, die vom Benutzer definierbar sind *)
  61.         
  62.         specialButHdler = RECORD
  63.                             objc : sINTEGER;
  64.                             proc : specialButProc;
  65.                           END;
  66.         
  67.   (* Listenverwaltung auch ber Prozedurvariablen *)
  68.   
  69.   TYPE  ResetProc       = ListMan.ResetProc;                    
  70.         (* Setzt Liste zurck auf Anfang *)
  71.  
  72.         MoveProc        = ListMan.MoveProc;          
  73.         (* Liefert n„chstes oder vorheriges Element, 
  74.          * NIL ansonsten
  75.          *)
  76.  
  77.         CountProc       = ListMan.CountProc;
  78.         (* Gibt die Anzahl der Eintr„ge in der 
  79.          * Liste zurck *)
  80.  
  81.   TYPE  ldHandler   = RECORD
  82.                         list        : ADDRESS; (* Zeiger auf die Liste *)
  83.                         resetList   : ResetProc; 
  84.                         nextEntry,
  85.                         prevEntry   : MoveProc;
  86.                         listElems   : CountProc;
  87.                         isEnabled   : entryIsSelectableProc;
  88.                         selEntry    : selectEntryProc;
  89.                         entryToStr  : entryToStringProc;
  90.                         isSelected  : isSelectedProc;
  91.                         drawEntry   : drawEntryProc;
  92.                         voffset     : sINTEGER;
  93.                         vsize       : sINTEGER;
  94.                         hStep       : sINTEGER;
  95.                         maxWidth    : sINTEGER;
  96.                       END;
  97.  
  98.   (* F„higkeiten des Listdialoges *)
  99.   TYPE  ldElems = (ldSelect, ldMultiple, ldArrows, ldDoubleExit, ldAutolocate, ldModal);
  100.         ldElemSet = SET OF ldElems;
  101.  
  102.         
  103.   TYPE DIAL;    (* opaquer Typ fr Verwaltung *)
  104.  
  105. PROCEDURE dummyInLoop (entry, env : ADDRESS);
  106. (* Dummy-Prozedur als InLoopProc *)
  107.  
  108. PROCEDURE dummyCheckExit (entry, env : ADDRESS; button: INTEGER; 
  109.                           lastSel: ADDRESS; kstate: BITSET): BOOLEAN;
  110. (* Dummy-Prozedur fr Exitcheck, gibt immer TRUE zurck *)
  111.  
  112. PROCEDURE BuildLdHandler (listStart   : ADDRESS; (* Zeiger auf die Liste *)
  113.                           resetList   : ResetProc; 
  114.                           nextEntry,
  115.                           prevEntry   : MoveProc;
  116.                           listElems   : CountProc;
  117.                           isEnabled   : entryIsSelectableProc;
  118.                           selEntry    : selectEntryProc;
  119.                           entryToStr  : entryToStringProc;
  120.                           isSelected  : isSelectedProc;
  121.                           drawEntry   : drawEntryProc;
  122.                           voffset     : sINTEGER;
  123.                           vsize       : sINTEGER;
  124.                           hStep       : sINTEGER;
  125.                           maxWidth    : sINTEGER;
  126.                           VAR handler: ldHandler);
  127. (* Baut aus den bergebenen Daten einen ldHandler zusammen 
  128.  *)
  129.  
  130. PROCEDURE PrepareListDial (tree : ADDRESS;
  131.                            elems : ldElemSet;
  132.                            VAR handler : ldHandler;
  133.                            boxIndex, 
  134.                            boxBack   : sINTEGER;
  135.                            okBut, 
  136.                            cancelBut : sINTEGER;
  137.                            env       : ADDRESS;
  138.                            doubleClickButton : sINTEGER;
  139.                            VAR d : DIAL) : BOOLEAN;
  140.  
  141. (* Bereitet einen Dialog fr eine Listenbehandlung vor. Der Dialog muž
  142.  * schon initialisiert sein.
  143.  *)
  144.  
  145. PROCEDURE ReleaseListDial (VAR d : DIAL) : BOOLEAN;
  146. (* gibt einen Listenhandler wieder frei *)
  147.  
  148. PROCEDURE FindDial      (tree : ADDRESS; button : sINTEGER; treeOnly : BOOLEAN) : DIAL;
  149. (* Gibt den zu dem Button geh”renden DIAL zurck,
  150.  * ansonsten NIL
  151.  *)
  152.  
  153. PROCEDURE NilDIAL () : DIAL;
  154. (* Gibt einen Nil-Dial zurck fr Vergleiche *)
  155.  
  156. PROCEDURE HandleListDial (d : DIAL; 
  157.                           VAR but : sINTEGER;     (* Der von DialDo gelieferte Button *)
  158.                           mx, my  : sINTEGER;     (* Die Mauskoordinaten *)
  159.                           kstate  : BITSET;      (* Der Tastaturstatus  *)
  160.                       VAR lastElem : ADDRESS) : BOOLEAN; 
  161. (* Verwaltet die Events, wenn etwas in diesem Dial angeklickt wurde 
  162.  * Rckgabe: TRUE = Exit-Button angew„hlt
  163.  *)
  164.  
  165. PROCEDURE DrawListDial (d: DIAL; clip: Rectangle);
  166. (* Zeichnet die Liste komplett inklusive aller Elemente *)
  167.  
  168. PROCEDURE InitAutoLocator (dial: DIAL);
  169. (* Setzt den Default-Dial fr den Autolocator, nur n”tig, wenn man 
  170.  * nicht doListDial benutzt 
  171.  *)
  172.  
  173. PROCEDURE FreeAutoLocator ();
  174. (* Entfernt den Default-Dial fr den Autolocator, nur n”tig, wenn man 
  175.  * nicht doListDial benutzt 
  176.  *)
  177.  
  178. PROCEDURE AutoLocate (tree : ADDRESS; mx, my : sINTEGER; scan : sINTEGER;
  179.                       kstate : sBITSET; event : sBITSET; edObj : sINTEGER): sBITSET;
  180. (* Der Autolocator zum manuellen Aufruf, falls man nicht ber 
  181.  * doListDial geht 
  182.  *)
  183.  
  184. PROCEDURE doListDial (tree : ADDRESS;
  185.                       elems : ldElemSet;
  186.                       VAR handler : ldHandler;
  187.                       boxIndex, boxBack,
  188.                       okBut, cancelBut : sINTEGER;
  189.                       env      : ADDRESS;
  190.                       doubleClickButton : sINTEGER;
  191.                       autoEdit   : INTEGER;
  192.                       inLoop     : inLoopProc;
  193.                       specials   : ARRAY OF specialButHdler;
  194.                       setValues  : wdSetProc;
  195.                       getValues  : wdSetProc;
  196.                       VAR lastElem : ADDRESS) : sINTEGER;
  197.  
  198. (* Handelt eine komplette Scrollbare Liste.
  199.  * Gibt den Index des Exit-Buttons zurck.
  200.  * In lastElem wird die Adresse des zuletzt selektierten Elements zurckgegeben.
  201.  * Bei multiple = TRUE k”nnen mehrere Eintr„ge selektiert werden.
  202.  *)
  203.  
  204. PROCEDURE WinListDial (tree : ADDRESS;
  205.                         elems : ldElemSet;
  206.                         VAR handler : ldHandler;
  207.                         boxIndex, boxBack,
  208.                         okBut, cancelBut : sINTEGER;
  209.                         env      : ADDRESS;
  210.                         doubleClickButton : sINTEGER;
  211.                         autoEdit   : INTEGER;
  212.                         inLoop     : inLoopProc;
  213.                         VAR specials: ARRAY OF specialButHdler;
  214.                         specialCount: INTEGER;
  215.                         checkExit  : lsCheckExitProc;
  216.                         setValues  : wdSetProc;
  217.                         getValues  : wdSetProc;
  218.                         VAR lastElem : ADDRESS) : BOOLEAN;
  219.  
  220. (* ™ffnet einen Dialog mit einer scrollbaren Liste als Fensterdialog
  221.  *)
  222.  
  223. END ListDl.
  224.